package com.gitee.wsl.compose.state.ext

import androidx.compose.runtime.Composable
import androidx.compose.runtime.SnapshotMutationPolicy
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.remember
import com.gitee.wsl.compose.state.S


//值 变换

/**
 * 值过滤
 * var input = remember { //不能用 by
 *         mutableStateOf("")
 *     }
 *
 *     val enabled by remember {
 *         derivedStateOf {
 *             input.length >= 6
 *         }
 *     }
 * 用于，例如，我们有一个很大的LazyColumn，现在我们希望：
 *
 * 在当前列表的第一个可见项（从上到下）的index大于50时，出现一个“回到顶部”的按钮。
 *
 * 又或者，我们希望有一个“列表分组计数器”，如果当前的第一个可见项（从上到下）的index>50，则显示1，如果>100，则显示2，如果>150，则显示3...以此类推。
 */
@Composable
fun <T> S.derivedState(calculation: () -> T) = remember { derivedStateOf(calculation) }

@Composable
fun <T> S.derivedState(policy: SnapshotMutationPolicy<T>, calculation: () -> T) = remember { derivedStateOf(calculation) }

@Composable
fun <T> S.derivedStateBy(key1: Any?, calculation: () -> T) = remember(key1 = key1) { derivedStateOf(calculation) }


